<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>05geojson创建线性要素</title>
    <!-- 1.导入依赖 -->
    <link rel="stylesheet" href="https://lib.baomitu.com/ol3/4.6.5/ol.css" />
    <script src="https://lib.baomitu.com/ol3/4.6.5/ol.js"></script>
  </head>
  <body>
    <!-- 2.设置地图容器的挂载点 -->
    <div id="map"></div>

    <script>
      // 3.初始化一个高德图层(初始化地图)
      const gaode = new ol.layer.Tile({
        title: '高德地图',
        source: new ol.source.XYZ({
          url: 'http://wprd0{1-4}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&style=7&x={x}&y={y}&z={z}',
          wrapX: false,
        }),
      })

      // 4.初始化openlayer地图
      const map = new ol.Map({
        // 将初始化的地图设置到id为map的DOM元素上
        target: 'map',
        layers: [gaode],
        view: new ol.View({
          center: [113.73, 33.62],
          // 设置地图的放大级别
          zoom: 16,
          projection: 'EPSG:4326',
        }),
      })

      // ---------------05geojson创建线性要素--------------

      //①设置线要素的GeoJSON数据
      var data = {
        type: 'FeatureCollection',
        features: [
          // 线要素
          {
            type: 'Feature',
            geometry: {
              type: 'LineString',
              coordinates: [
                [113.73, 33.62],
                [114.3, 30.5],
              ],
            },
          },
          // 面要素
          {
            type: 'Feature',
            geometry: {
              type: 'Polygon',
              coordinates: [
                [
                  [110.3, 31.4], // 西南角
                  [114.3, 30.5], // 武汉
                  [115, 31.6], // 重点
                  [113.73, 33.62], // 漯河
                  [110.3, 31.4], // 回到起点闭合
                ],
              ],
            },
          },
        ],
      }

      // ②.创建数据源以添加线要素
      const source = new ol.source.Vector({
        // features: new ol.format.GeoJSON().readFeatures(data),
        features: new ol.format.GeoJSON().readFeatures(data),
      })
      // 创建图层以添加数据源
      const layer = new ol.layer.Vector({
        source,
      })

      //添加样式
      const style = new ol.style.Style({
        // 线样式
        stroke: new ol.style.Stroke({
          color: 'green',
          width: 4,
        }),
        // 面样式
        fill: new ol.style.Fill({
          color: 'rgba(50,50,50,0.3)',
          width: 2,
        }),
      })
      layer.setStyle(style)
      // 在地图容器中添加适量图层
      map.addLayer(layer)
    </script>
  </body>
</html>
